﻿using System;

namespace UnitTestingSamples
{
    public class StringSample
    {
        //构造函数，传入初始化字符串
        public StringSample(string init)
        {
            //如果初始化字符串为null
            if (init == null)
                //抛出空异常
                throw new ArgumentNullException(nameof(init));
            //将构造函数传入的参数送入_init私有字段
            _init = init;
        }
        //私有字段_init
        private string _init;
        
        //在字符串first中查找子窜second，并将其移除
        //把各种可能性均考量在内
        public string GetStringDemo(string first, string second)
        {
            //如果第一个字符串为null
            if (first == null)
            {
                //抛出空异常
                throw new ArgumentNullException(nameof(first));
            }
            //如果第1个字符串为null或空串
            if (string.IsNullOrEmpty(first))
            {
                //抛出空异常，异常消息：不允许传入空串
                throw new ArgumentException("empty string is not allowed", first);
            }
            //如果第2个字符串为null
            if (second == null)
            {
                //抛出null异常
                throw new ArgumentNullException(nameof(second));
            }
            //如果第2个字符串长度大于第一个字符串长度
            if (second.Length > first.Length)
            {
                //抛出超出范围异常
                throw new ArgumentOutOfRangeException(nameof(second),
                  "must be shorter than first");
            }

            //定位第2个字符串在第一个字符串的起始位置，并存入startIndex
            int startIndex = first.IndexOf(second);
            
            if (startIndex < 0)
            {
                return $"{second} not found in {first}";
            }
            else if (startIndex < 5)
            {
                //将第2个字符串在第一个字符串中移除
                string result = first.Remove(startIndex, second.Length);
                //返回移除情况
                return $"removed {second} from {first}: {result}";
            }
            else
            {
                //返回固定区域特定规则 大写_init
                return _init.ToUpperInvariant();
            }
        }
    }
}
